package com.javatiaocao.myblog.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.javatiaocao.myblog.constant.CodeType;
import com.javatiaocao.myblog.mapper.VisitorMapper;
import com.javatiaocao.myblog.service.VisitorService;
import com.javatiaocao.myblog.utils.DataMap;
import com.javatiaocao.myblog.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class VisitorServiceImpl implements VisitorService {
    @Autowired
    VisitorMapper visitorMapper;
    @Autowired
    RedisTemplate redisTemplate;

    private String sessionIdSave = "session";

    @Override
    public DataMap getVisitorNumByPageName(String sessionId) {
        if (sessionId == null && StringUtil.BLANK.equals(sessionId)){
            return DataMap.fail(CodeType.SERVER_EXCEPTION);
        }

        int totalVisitor = (int)redisTemplate.opsForHash().get("visitor","totalVisitor");
        int pageVisitor = (int)redisTemplate.opsForHash().get("visitor","visitorVolume");
        if (totalVisitor == 0){
            totalVisitor =(int) visitorMapper.getVisitorNum("totalVisitor").getVisitorNum();
            redisTemplate.opsForHash().put("visitor","totalVisitor",totalVisitor);
        }
        if (pageVisitor == 0){
            pageVisitor = 0;
            redisTemplate.opsForHash().put("visitor","visitorVolume",pageVisitor);
        }

        if (!sessionIdSave.equals(sessionId)){
            totalVisitor += 1;
            pageVisitor += 1;
            redisTemplate.opsForHash().put("visitor","totalVisitor",totalVisitor);
            redisTemplate.opsForHash().put("visitor","visitorVolume",pageVisitor);
            sessionIdSave = sessionId;
        }


        JSONObject returnObject = new JSONObject();
        returnObject.put("totalVisitor",redisTemplate.opsForHash().get("visitor","totalVisitor"));
        returnObject.put("pageVisitor",redisTemplate.opsForHash().get("visitor","visitorVolume"));
        return DataMap.success().setData(returnObject);
    }
}
